<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
FlyUI Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="flybase.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b>FlyUI</b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>flybase.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		This script defines utilities for interacting with data from flybase.
 <BR/><BR/><B>Version: </B>$Revision:538 $ on $Date: 2008-08-27 09:08:41 +0100 (Wed, 27 Aug 2008) $ by $Author: aliman $
 <BR/><BR/><B>Requires:</B><UL>- <a href="../../flyui/util.html#">flyui.util</a><BR/>- YAHOO.util.Connect
 TODO license terms</UL><B>Author:</B> <a href="http://purl.org/net/aliman">Alistair Miles</a>
 <BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="flyui/flybase/Gene.html">flyui.flybase.Gene</a></b></td>
    <td>A Gene object.</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="flyui/flybase/GenePool.html">flyui.flybase.GenePool</a></b></td>
    <td>A pool of gene objects.</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="flyui/flybase/Service.html">flyui.flybase.Service</a></b></td>
    <td>A wrapper for a flybase SPARQL endpoint.</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 * <span class="attrib">@fileoverview</span>
 * This script defines utilities for interacting with data from flybase.
 * <span class="attrib">@author</span> &lt;a href="http://purl.org/net/aliman"&gt;Alistair Miles&lt;/a&gt;
 * <span class="attrib">@version</span> $Revision:538 $ on $Date: 2008-08-27 09:08:41 +0100 (Wed, 27 Aug 2008) $ by $Author: aliman $
 * <span class="attrib">@requires</span> flyui.util
 * <span class="attrib">@requires</span> YAHOO.util.Connect
 * TODO license terms
 */</span>


<span class="comment">// create a namespace if not already defined</span>
flyui.namespace(<span class="literal">"flyui.flybase"</span>);


<span class="comment">/**
 * Create a service object.
 * <span class="attrib">@class</span>
 * A wrapper for a flybase SPARQL endpoint.
 * <span class="attrib">@extends</span> flyui.sparql.Service
 * <span class="attrib">@constructor</span> 
 * <span class="attrib">@param</span> {String} endpointURL the location of the flybase SPARQL endpoint
 */</span>
flyui.flybase.Service = <span class="reserved">function</span>( endpointURL ) {
	
	<span class="comment">/**
	 * <span class="attrib">@private</span>
	 */</span>
	<span class="reserved">this</span>._endpoint = endpointURL;
	
};


<span class="comment">// extend</span>
flyui.flybase.Service.<span class="reserved">prototype</span> = new flyui.sparql.Service();


<span class="comment">/**
 * Find genes by any name, for example "FBgn123456", "CG1234", "aly".
 * <span class="attrib">@param</span> {String} anyName the gene name to search by
 * <span class="attrib">@param</span> {Function} success the success case callback function, which must accept an array of Gene objects
 * <span class="attrib">@param</span> {Function} failure the failure case callback function, which must accept a YUI HTTP response object
 */</span>
flyui.flybase.Service.<span class="reserved">prototype</span>.findGenesByAnyName = <span class="reserved">function</span>( anyName, success, failure ) {
	var _context = <span class="literal">"flyui.flybase.Service.prototype.findGenesByAnyName"</span>;
	try {
        flyui.info(<span class="literal">"request: "</span>+anyName, _context);
        var chain = flyui.chain(flyui.flybase.Service.responseToGenes, success);
        var query = flyui.flybase.Service._buildQueryForFindGenesByAnyName(anyName);
        <span class="reserved">this</span>.query(query, chain, failure);    
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
};


<span class="comment">/**
 * Find genes by any name, for example "FBgn123456", "CG1234", "aly", using a case-insensitive comparison.
 * <span class="attrib">@param</span> {String} anyName the gene name to search by
 * <span class="attrib">@param</span> {Function} success the success case callback function, which must accept an array of Gene objects
 * <span class="attrib">@param</span> {Function} failure the failure case callback function, which must accept a YUI HTTP response object
 */</span>
flyui.flybase.Service.<span class="reserved">prototype</span>.findGenesByAnyNameCaseInsensitive = <span class="reserved">function</span>( anyName, success, failure ) {
    var _context = <span class="literal">"flyui.flybase.Service.prototype.findGenesByAnyNameCaseInsensitive"</span>;
    try {
        flyui.info(<span class="literal">"request: "</span>+anyName, _context);
        var successChain = flyui.chain(flyui.flybase.Service.responseToGenes, success);
        var query = flyui.flybase.Service._buildQueryForFindGenesByAnyNameCaseInsensitive(anyName);
        <span class="reserved">this</span>.query(query, successChain, failure);
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
}


<span class="comment">/**
 * <span class="attrib">@param</span> {Object} response
 * <span class="attrib">@type</span> Array&lt;flyui.flybase.Gene&gt;
 * <span class="attrib">@private</span>
 * <span class="attrib">@static</span>
 */</span>
flyui.flybase.Service.responseToGenes = <span class="reserved">function</span>( response ) {
    var _context = <span class="literal">"flyui.flybase.Service.responseToGenes"</span>;
    try {
        flyui.debug(<span class="literal">"response status: "</span>+response.status, _context);
        
        flyui.debug(<span class="literal">"try parsing response text as json"</span>, _context);
        flyui.debug(<span class="literal">"parsing response: "</span>+response.responseText, _context);
        var resultSet = YAHOO.lang.JSON.parse(response.responseText);
        
        flyui.debug(<span class="literal">"convert result set to an array of genes"</span>, _context);
        var genes = flyui.flybase.Gene.newInstancesFromSPARQLResults(resultSet);
        
        <span class="reserved">return</span> genes;
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
};


<span class="comment">/**
 * Build a SPARQL query to retrieve genes by any name.
 * <span class="attrib">@param</span> {String} anyName the gene name to search by
 * <span class="attrib">@return</span> a SPARQL query
 * <span class="attrib">@type</span> String
 * <span class="attrib">@private</span>
 * <span class="attrib">@static</span>
 */</span>
flyui.flybase.Service._buildQueryForFindGenesByAnyName = <span class="reserved">function</span>( anyName ) {
    var _context = <span class="literal">"flyui.flybase.Service._buildQueryForFindGenesByAnyName"</span>;
    try {
    <span class="comment">//  var prefixes =  "PREFIX xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; " +</span>
    <span class="comment">//                  "PREFIX flybase: &lt;http://rodos.zoo.ox.ac.uk/2008/flyweb/ontologies/flybase/&gt; ";</span>
    <span class="comment">//</span>
    <span class="comment">//  var body =      "SELECT * WHERE { " +</span>
    <span class="comment">//                      "?gene flybase:anyname '"+anyName+"'^^xsd:string; " + </span>
    <span class="comment">//                          "flybase:flybaseID ?flybaseID. " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:symbol ?symbol} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:annotationSymbol ?annotationSymbol} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:fullname ?fullName} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:synonym ?synonym} " + </span>
    <span class="comment">//                  "}";</span>
    
        var prefixes =  <span class="literal">"PREFIX chado: &lt;http://purl.org/net/chado/schema/&gt; "</span> +
                        <span class="literal">"PREFIX fbutil: &lt;http://purl.org/net/openflydata/flybase-utils/&gt; "</span> +
                        <span class="literal">"PREFIX syntype: &lt;http://purl.org/net/flybase/synonym-types/&gt; "</span> +
                        <span class="literal">"PREFIX xs: &lt;http://www.w3.org/2001/XMLSchema#&gt; "</span>;
                        
        var body =      <span class="literal">"SELECT * WHERE { "</span> +
                        <span class="literal">"?gene fbutil:anyName \"</span><span class="literal">"+anyName+"</span>\<span class="literal">"^^xs:string ; "</span> + 
                        <span class="literal">"    a chado:Feature ; "</span> +
                        <span class="literal">"    chado:name ?symbol ; "</span> +
                        <span class="literal">"    chado:uniquename ?flybaseID . "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:dbxref [ chado:accession ?annotationSymbol ] . } "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:synonym [ chado:name ?synonym ] . } "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:synonym [ a syntype:FullName ; chado:name ?fullName ] . } "</span> +
                        <span class="literal">"}"</span>; 
    
        var query = prefixes + body;
    
        <span class="reserved">return</span> query;
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    

};


<span class="comment">/**
 * Build a SPARQL query to retrieve genes by any name.
 * <span class="attrib">@param</span> {String} anyName the gene name to search by
 * <span class="attrib">@return</span> a SPARQL query
 * <span class="attrib">@type</span> String
 * <span class="attrib">@private</span>
 * <span class="attrib">@static</span>
 */</span>
flyui.flybase.Service._buildQueryForFindGenesByAnyNameCaseInsensitive = <span class="reserved">function</span>( anyName ) {
    var _context = <span class="literal">"flyui.flybase.Service._buildQueryForFindGenesByAnyNameCaseInsensitive"</span>;
    try {
    <span class="comment">//  var prefixes =  "PREFIX xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; " +</span>
    <span class="comment">//                  "PREFIX flybase: &lt;http://rodos.zoo.ox.ac.uk/2008/flyweb/ontologies/flybase/&gt; ";</span>
    <span class="comment">//</span>
    <span class="comment">//  var body =      "SELECT * WHERE { " +</span>
    <span class="comment">//                      "?gene flybase:anyNameLowerCase '"+anyName.toLowerCase()+"'^^xsd:string; " + </span>
    <span class="comment">//                          "flybase:flybaseID ?flybaseID. " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:symbol ?symbol} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:annotationSymbol ?annotationSymbol} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:fullname ?fullName} " + </span>
    <span class="comment">//                      "OPTIONAL {?gene flybase:synonym ?synonym} " + </span>
    <span class="comment">//                  "}";</span>
    
        var prefixes =  <span class="literal">"PREFIX chado: &lt;http://purl.org/net/chado/schema/&gt; "</span> +
                        <span class="literal">"PREFIX fbutil: &lt;http://purl.org/net/openflydata/flybase-utils/&gt; "</span> +
                        <span class="literal">"PREFIX syntype: &lt;http://purl.org/net/flybase/synonym-types/&gt; "</span> +
                        <span class="literal">"PREFIX xs: &lt;http://www.w3.org/2001/XMLSchema#&gt; "</span>;
                        
        var body =      <span class="literal">"SELECT * WHERE { "</span> +
                        <span class="literal">"?gene fbutil:anyNameLowerCase \"</span><span class="literal">"+anyName.toLowerCase()+"</span>\<span class="literal">"^^xs:string ; "</span> + 
                        <span class="literal">"    a chado:Feature ; "</span> +
                        <span class="literal">"    chado:name ?symbol ; "</span> +
                        <span class="literal">"    chado:uniquename ?flybaseID . "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:dbxref [ chado:accession ?annotationSymbol ] . } "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:synonym [ chado:name ?synonym ] . } "</span> +
                        <span class="literal">"OPTIONAL { ?gene chado:synonym [ a syntype:FullName ; chado:name ?fullName ] . } "</span> +
                        <span class="literal">"}"</span>; 
    
        var query = prefixes + body;
    
        <span class="reserved">return</span> query;    
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
};


<span class="comment">/**
 * Construct a new gene object.
 * <span class="attrib">@class</span>
 * A Gene object.
 * <span class="attrib">@constructor</span>
 */</span>
flyui.flybase.Gene = <span class="reserved">function</span>() {
	
	var that = <span class="reserved">this</span>;

	<span class="comment">/**
	 * <span class="attrib">@type</span> String
	 */</span>
	<span class="reserved">this</span>.flybaseID = null;
	
	<span class="comment">/**
	 * <span class="attrib">@type</span> Array
	 */</span>
	<span class="reserved">this</span>.symbols = new Array();

	<span class="comment">/**
	 * <span class="attrib">@type</span> Array
	 */</span>
	<span class="reserved">this</span>.annotationSymbols = new Array();

	<span class="comment">/**
	 * <span class="attrib">@type</span> Array
	 */</span>
	<span class="reserved">this</span>.fullNames = new Array();

	<span class="comment">/**
	 * <span class="attrib">@type</span> Array
	 */</span>
	<span class="reserved">this</span>.synonyms = new Array();

	<span class="comment">/** 
	 * Add a symbol for this gene.
	 * <span class="attrib">@param</span> {String} symbol e.g. "TODO"
	 */</span>
	<span class="reserved">this</span>.addSymbol = <span class="reserved">function</span>( symbol ) {
		flyui.util.appendIfNotMember(that.symbols, symbol);
	};

	<span class="comment">/** 
	 * Add an annotation symbol for this gene.
	 * <span class="attrib">@param</span> {String} annotationSymbol e.g. "TODO"
	 */</span>
	<span class="reserved">this</span>.addAnnotationSymbol = <span class="reserved">function</span>( annotationSymbol ) {
		flyui.util.appendIfNotMember(that.annotationSymbols, annotationSymbol);
	};


	<span class="comment">/** 
	 * Add a full name for this gene.
	 * <span class="attrib">@param</span> {String} fullName e.g. "TODO"
	 */</span>
	<span class="reserved">this</span>.addFullName = <span class="reserved">function</span>( fullName ) {
		flyui.util.appendIfNotMember(that.fullNames, fullName);
	};


	<span class="comment">/** 
	 * Add a synonym for this gene.
	 * <span class="attrib">@param</span> {String} synonym e.g. "TODO"
	 */</span>
	<span class="reserved">this</span>.addSynonym = <span class="reserved">function</span>( synonym ) {
		flyui.util.appendIfNotMember(that.synonyms, synonym);
	};

};


<span class="comment">/**
 * Create an array of gene objects from a SPARQL result set obejct.
 * <span class="attrib">@param</span> {Object} resultSet a SPARQL result set
 * <span class="attrib">@return</span> an array of Gene objects
 * <span class="attrib">@type</span> Array
 */</span>
flyui.flybase.Gene.newInstancesFromSPARQLResults = <span class="reserved">function</span>( resultSet ) {
    var _context = <span class="literal">"flyui.flybase.Gene.newInstancesFromSPARQLResults"</span>;
    try {
        var pool = new flyui.flybase.GenePool();
    
        var bindings = resultSet.results.bindings;
        <span class="reserved">for</span> (var i in bindings) {
            var flybaseID = bindings[i].flybaseID.value;
            var gene = pool.get(flybaseID);
            <span class="reserved">if</span> (bindings[i].symbol) {
                gene.addSymbol(bindings[i].symbol.value);
            }
            <span class="reserved">if</span> (bindings[i].annotationSymbol) {
                gene.addAnnotationSymbol(bindings[i].annotationSymbol.value);
            }
            <span class="reserved">if</span> (bindings[i].fullName) {
                gene.addFullName(bindings[i].fullName.value);
            }
            <span class="reserved">if</span> (bindings[i].synonym) {
                gene.addSynonym(bindings[i].synonym.value);
            }
        }
    
        <span class="reserved">return</span> pool.toArray();
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
};


<span class="comment">/**
 * Create a pool of gene objects.
 * <span class="attrib">@class</span>
 * A pool of gene objects.
 * <span class="attrib">@constructor</span>
 */</span>
flyui.flybase.GenePool = <span class="reserved">function</span>() {
	
	<span class="comment">/**
	 * <span class="attrib">@private</span>
	 */</span>
	<span class="reserved">this</span>._pool = new Object();

};


<span class="comment">/**
 * Get a gene from the pool, or create a new one if it doesn't exist.
 * <span class="attrib">@param</span> {String} flybaseID 
 * <span class="attrib">@return</span> a flyui.flybase.Gene object
 */</span>
flyui.flybase.GenePool.<span class="reserved">prototype</span>.get = <span class="reserved">function</span>( flybaseID ) {
    var _context = <span class="literal">"flyui.flybase.GenePool.prototype.get"</span>;
    try {
        var gene = <span class="reserved">this</span>._pool[flybaseID];
        
        <span class="reserved">if</span> ( typeof gene == <span class="literal">"undefined"</span> || !gene ) {
            gene = new flyui.flybase.Gene();
            gene.flybaseID = flybaseID;
            <span class="reserved">this</span>._pool[flybaseID] = gene;   
        }
        
        <span class="reserved">return</span> gene;
    
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    	
};


flyui.flybase.GenePool.<span class="reserved">prototype</span>.toArray = <span class="reserved">function</span>() {
    var _context = <span class="literal">"flyui.flybase.GenePool.prototype.toArray"</span>;
    try {
        var array = new Array();
        <span class="reserved">for</span> (var key in <span class="reserved">this</span>._pool) {
            array[array.length] = <span class="reserved">this</span>._pool[key];
        }
        <span class="reserved">return</span> array;
    } catch (error) {
        flyui.debug(<span class="literal">"wrap and rethrow error to get a stack trace"</span>, _context);
        throw new flyui.UnexpectedException(_context, error);
    }    
}

</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b>FlyUI</b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Tue Dec  9 11:08:18 2008</div>
</body>
</html>
